package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ISaleRebatesRecordDAO;
import org.jsola.hr.dto.CalculationRebatesDTO;
import org.jsola.hr.dto.SaleRebatesRecordAddDTO;
import org.jsola.hr.dto.SaleRebatesRecordUpdateDTO;
import org.jsola.hr.entity.CompanyDO;
import org.jsola.hr.entity.SaleRebatesRecordDO;
import org.jsola.hr.query.SaleRebatesRecordQuery;
import org.jsola.hr.vo.*;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 返费记录
 *
 * @author zhr
 */
public interface ISaleRebatesRecordService extends IService<ISaleRebatesRecordDAO, SaleRebatesRecordDO> {

    /**
     * 新增返费记录
     *
     * @param saleRebatesRecordAddDTO 新增返费记录DTO
     * @param tokenUser               当前用户
     * @return 返费记录详情信息
     */
    SaleRebatesRecordVO save(SaleRebatesRecordAddDTO saleRebatesRecordAddDTO, TokenUser tokenUser);

    /**
     * 修改返费记录
     *
     * @param saleRebatesRecordUpdateDTO 修改返费记录DTO
     * @param tokenUser                  当前用户
     * @return 更新数量
     */
    int update(SaleRebatesRecordUpdateDTO saleRebatesRecordUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除返费记录，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser            当前用户
     * @param saleRebatesRecordIds 返费记录id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... saleRebatesRecordIds);

    /**
     * 根据返费记录id查找
     *
     * @param saleRebatesRecordId 返费记录id
     * @param siteId              所属站点id
     * @return 返费记录详情信息
     */
    SaleRebatesRecordVO selectById(String saleRebatesRecordId, String siteId);

    /**
     * 查询返费记录
     *
     * @param saleRebatesRecordQuery 查询条件
     * @param siteId                 所属站点id
     * @return 返费记录列表信息
     */
    List<SaleRebatesRecordListVO> select(SaleRebatesRecordQuery saleRebatesRecordQuery, String siteId);

    /**
     * 查询返费记录记录数
     *
     * @param saleRebatesRecordQuery 查询条件
     * @param siteId                 所属站点id
     * @return 返费记录记录数
     */
    int selectCount(SaleRebatesRecordQuery saleRebatesRecordQuery, String siteId);

    /**
     * 分页查询返费记录
     *
     * @param saleRebatesRecordQuery 查询条件
     * @param tokenUser              当前用户
     * @return 返费记录列表信息
     */
    Page<SaleRebatesRecordListVO> selectPage(SaleRebatesRecordQuery saleRebatesRecordQuery, TokenUser tokenUser);


    /**
     * 根据返费记录id查找
     *
     * @param saleRebatesRecordId 返费记录id
     * @param siteId              所属站点id
     * @return 返费记录
     */
    SaleRebatesRecordDO selectDOById(String saleRebatesRecordId, String siteId);

    /**
     * 查询返费记录
     *
     * @param saleRebatesRecordQuery 查询条件
     * @param siteId                 所属站点id
     * @return 返费记录列表
     */
    List<SaleRebatesRecordDO> selectDO(SaleRebatesRecordQuery saleRebatesRecordQuery, String siteId);

    /**
     * 计算返费
     *
     * @param calculationRebatesDTO 计算返费参数
     * @param tokenUser             当前用户
     * @return 计算结果
     */
    CalculationRebatesVO calculationRebates(CalculationRebatesDTO calculationRebatesDTO, TokenUser tokenUser);

    /**
     * 批量保存
     *
     * @param saveList 保存列表
     */
    void bachSave(List<SaleRebatesRecordDO> saveList);

    /**
     * 查询对应用户的所有返费记录
     *
     * @param tokenUser 当前用户
     * @param query     查询参数
     * @return 返费记录
     */
    List<SaleRebatesRecordDO> selectRecordByUserId(SaleRebatesRecordQuery query, TokenUser tokenUser);

    /**
     * 管理端小程序-我的佣金
     *
     * @param query     查询参数
     * @param tokenUser 当前用户
     * @return 我的拥挤
     */
    MyCommissionVO myCommission(SaleRebatesRecordQuery query, TokenUser tokenUser);

    /**
     * 查询对应用户绑定的用工单位
     *
     * @param tokenUser 当前用户
     * @return 绑定的用工单位
     */
    List<CompanyDO> selectCompanyByUser(TokenUser tokenUser);

    /**
     * 返费概览返费记录列表
     *
     * @param query     查询参数
     * @param tokenUser 当前用户
     * @return 返费记录列表
     */
    Page<SaleRebatesRecordListVO> rebateOverviewList(SaleRebatesRecordQuery query, TokenUser tokenUser);

    /**
     * 返费概览分组统计
     *
     * @param query     查询参数
     * @param tokenUser 当前用户
     * @return 统计数据
     */
    RebateOverviewGroupVO rebateOverviewGroup(SaleRebatesRecordQuery query, TokenUser tokenUser);

    /**
     * 返费概览月份趋势统计
     *
     * @param query     查询条件
     * @param tokenUser 当前用户
     * @return 趋势统计
     */
    RebateOverviewMonthVO rebateOverviewMonth(SaleRebatesRecordQuery query, TokenUser tokenUser);
}


